EXPRESIONES
VIRTUALES

“La ciencia puede poner límites al conocimiento, pero no debería poner límites a la imaginación” (Bertrand Russell)

“Nuestras mentes, o nuestra conciencia, aparecen en la frontera entre lo real y lo imaginal” (Fred Alan Wolf)



Concepto de Expresión Virtual

Definición

Una expresión virtual es una expresión que hace referencia a otras expresiones ya existentes (llamadas expresiones base) y que cambian automáticamente cuando cambian las expresiones base.


Observaciones
Ejemplos de expresiones virtuales no parametrizadas
  1. Matriz transpuesta

    Tenemos la matriz (secuencia de secuencias de la misma longitud) siguiente:

    ( x = ((a b c) (d e f)) ) // matriz de 2 filas y 3 columnas

    Esta expresión es equivalente a:

    ( (x\1\1 = a) (x\1\2 = b) (x\1\3 = c)
    (x\2\1 = d) (x\2\2 = e) (x\2\3 = f) )


    Queremos obtener la vista xt de x siguiente, que corresponde a la matriz transpuesta de x:

    ( xt = ((a d) (b e) (c f)) ) // matriz de 3 filas y 2 columnas

    La matriz traspuesta es:

    ⟨( xt = ((x\1\1 x\2\1) (x\1\2 x\2\2) (x\1\3 x\2\3)) )⟩

    xt // ev. ((a b) (b e) (c f))


    Esta expresión es genérica, por lo que es válida en todo momento, de tal manera que si, por ejemplo, hacemos un cambio en x, entonces tenemos automáticamente el nuevo valor de xt:

    (x/1 = (1 2 3))
    x // ev. (( 1 2 3) (d e f) )
    xt // ev. ((1 d) (2 e) (3 f)) )


  2. Unión de dos conjuntos

    Tenemos los dos conjuntos siguientes:


    Queremos que la expresión union corresponda en todo momento a la unión de ambos conjuntos, independientemente de sus valores. Ello se logra simplemente mediante la expresión genérica


    Inicialmente,
    union // ev. {a b c d e f}

    Si hacemos el cambio


    entonces tenemos automáticamente el nuevo valor de union:

    union // ev. {1 2 3 d e f} )

  3. Selección de elementos de una secuencia

    Tenemos la siguiente secuencia numérica:

    (s = (45 34 6 12 85 23 72 51})

    Queremos que sel1 sea, en todo momento, la secuencia con los elementos de s menores o iguales que 50 y sel2 los mayores de esta cantidad.


    Inicialmente,

    sel1 // ev. (45 34 6 12 23)
    sel2 // ev. (85 72 51)


    Si hacemos el cambio (s\6 = 99), entonces tenemos automáticamente los nuevos valores de sel1 y sel2:

    sel1 // ev. (45 34 6 12)
    sel2 // ev. (85 72 51 99)

Ejemplos de expresiones virtuales parametrizadas
  1. Matriz transpuesta de cualquier matriz x:

    De forma general, transpuesta de una matriz x:

    ⟨( t(x) = ((nf = x#) // número de filas de x
    (nc = (x\1)#) // número de columnas de x
    (v = ( ( 0★nf)★nc ))
    v/⟨( v\i\j = x\j\i )) )⟩ ¡v )⟩


    ( x = (abc def) )
    t(x) // ev. (ad be cf)


  2. Unión de dos conjuntos cualesquiera x e y:

    ⟨( union(x y) = {xy↓} )⟩ // definición general

    ( u = {a b c} )
    ( v = {d e f} )
    union(u v) // ev. {a b c d e f}


    ⟨( unionuv = union(u v) )⟩ // definición para dos conjuntos específicos
    ( u = {1 2 3} ) // modificación del conjunto u
    unionuv // ev. {1 2 3 d e f} (nueva unión de u y v)


  3. Selección, respectivamente, de elementos menores o iguales y mayores que n en una secuencia cualquiera s:

    ⟨( sel1(s n) = (s⇓(≤n) )⟩
    ⟨( sel2(s n) = (s⇓(>n) )⟩

    (s = (45 34 6 12 85 23 72 51})


    ⟨( s1 = sel1(s 50) )⟩
    ⟨( s2 = sel2(s 50) )⟩
    s1 // ev. (45 34 6 12 23}
    s2 // ev. (85 72 51)

    (s/6 = 99) // se cambia s
    s1 // ev. (45 34 6 12} // s1 cambia automáticamente
    s2 // ev. (85 99 72 52} // s2 cambia automáticamente

Otros Tipos de Expresiones Virtuales

Expresiones virtuales de orden superior

Pueden definirse expresiones virtuales de expresiones virtuales, parametrizadas o no.

Ejemplos:
  1. En el ejemplo de la unión de dos conjuntos, se define la suma de los elementos a partir de la unión:

    ⟨( union(x y) = {xy↓} )⟩
    ⟨( suma(x y) = +⊣( (union(x y))↓ ) )⟩


    (u = {1 2 3})
    (v = {11 12 13})
    union(u v) // ev. {1 2 3 11 12 13}
    suma(u v)) // ev. 42

    ⟨( suv = suma(union(u v)) )⟩
    suv // ev. 42
    (u = {−1 −2 −3}) // cambiamos u
    suv // ev. 30 // nuevo valor de la suma


  2. En el ejemplo de la selección de elementos de una secuencia, se seleccionan elementos de elementos seleccionados.

    ⟨( sel1(x n) = (x⇓(≤n) )⟩ // selección de orden 1

    ⟨( sel2(x n) = (sel1(x n))⇓(>n) )⟩ // selección de orden 2


    ( s = (45 34 6 12 85 23 72 51} )

    Menores o iguales que 50:
    sel1(s 50) // ev. (45 34 6 12 23}

    Y mayores que 30:
    sel2(sel1(s 50) 30) // ev. (45 34}

Expresiones virtuales dinámicas

Son expresiones virtuales que se modifican durante el proceso de ejecución. Ejemplo:

⟨( sel(x n) = x⇓(≤n) )⟩ // definición inicial
(s = (45 34 6 12 85 23 72 51})
sel(s 50) // ev. (45 34 6 12 23}
⟨( sel(x n) = x⇓(≥n)+1) )⟩ // se redefine la selección
sel(s 50) // ev. (85 72 51}


También se podía haber parametrizado el operador de comparación.